//规定了串的基础功能
#ifndef __VIRTUALSTRING__HPP
#define __VIRTUALSTRING__HPP

#include"../Universal.h"

namespace NgSiuKei {

class VirtualString {
    public:
    VirtualString(void);
    ~VirtualString(void);

    public:
    //判空
    bool isEmpty(void) const;
    //串长度
    const U_L_L getLen(void) const;

    public:
    //清空
    virtual void clear(void) = 0;
    //使自身内容等于目标字符串
    virtual void assign(const char * const str) = 0;
    //比较大小：self<str返回-1；self=str返回0；self>str返回S1
    virtual int compare(const VirtualString *str) const = 0;
    //拼接
    virtual void concat(const VirtualString *str) = 0;
    //获取指定下标（index）开始的指定长度（len）的子串
    virtual VirtualString *getSubstring(const U_L_L index, const U_L_L len) const = 0;
    //获取子串在下标index后出现的位置，否则会抛出异常：EXCEPTION_CAN_NOT_FIND
    virtual U_L_L getIndex(const VirtualString *str, const U_L_L index) const = 0;
    //用str2替换字符串中所有与str1相等的子串
    virtual void replace(const VirtualString *str1, const VirtualString *str2) = 0;
    //在指定下标处插入字符串
    virtual void insert(const VirtualString *str1, const U_L_L index) = 0;
    //在指定下标处删除指定长度的子串
    virtual void remove(const U_L_L index, const U_L_L len) = 0;
    //字符串本体
    virtual const char * const getString(void) const = 0;
    //打印
    virtual void print(void) const = 0;

    protected:
    U_L_L len;
};

VirtualString::VirtualString(void) {
    this->len = 0;
};

VirtualString::~VirtualString(void) {
    
};

bool VirtualString::isEmpty(void) const {
    return 0 == this->len;
}

const U_L_L VirtualString::getLen(void) const {
    return this->len;
}

}

#endif